﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MMK.PaketTRacker.Server.Test.Webservice;
using System.IO;
using System.Drawing;

namespace MMK.PaketTRacker.Server.Test
{
    class Program
    {
        static void Main(string[] args)
        {
			Guid mitarbeiterGuid = new Guid("CA89DAD4-0E74-44EB-92DA-E94F03EF05D1");
            Guid paketstelleGuid = new Guid("29e73647-9558-4581-a85f-2e1d019a36c9");
            Guid paketzentrumGuid = new Guid("002a7358-93a3-4377-a73b-3f3fbc45e61a");
            Guid fahrzeugGuid = new Guid("c0065c36-e8fc-48f8-8234-1185abdecaef");

            Webservice.WebservicesSoapClient client = new Webservice.WebservicesSoapClient();
            
            Console.WriteLine(client.Test("123"));


			Console.WriteLine("IsMitarbeiterValid");
			Mitarbeiter mit = client.IsMitarbeiterValid("12345");
            if (mit != null)
                Console.WriteLine("Mitarbeiter gefunden");
			Console.WriteLine("fertig");

            Adresse absender = new Adresse();
            absender.Name = "Gloth";
            absender.Vorname = "Kai";
            absender.Strasse = "Am Münster";
            absender.Hausnummer = "8";
            absender.PLZ = "37154";
            absender.Ort = "Northeim";

            Adresse empfaenger = new Adresse();
			empfaenger.Name = "Gloth";
			empfaenger.Vorname = "Kai";
			empfaenger.Strasse = "Am Münster";
			empfaenger.Hausnummer = "8";
			empfaenger.PLZ = "37154";
			empfaenger.Ort = "Northeim";

            PaketStatus status;

            Console.WriteLine("NewPaket");
            string paketIdent = client.NewPaket(1.0, 1.0, absender, empfaenger);
            Console.WriteLine("fertig");
            Console.WriteLine("PaketIdent lautet: " + paketIdent);


			Console.WriteLine("GetAdresse");
			Adresse adresse1 = client.GetAdresse(paketIdent, AdresseType.Absender);
			Console.WriteLine("fertig");

			Console.WriteLine("GetAdresse");
			Adresse adresse2 = client.GetAdresse(paketIdent, AdresseType.Empfaenger);
			Console.WriteLine("fertig");

            //status = client.GetPaketStatus(paketIdent);
            //SaveBytetoPNG(status.MapImage, "Newpaket.jpg");

            Console.WriteLine("InVersandprozessAufgenommen");
            client.InVersandprozessAufgenommen(paketIdent, mitarbeiterGuid, paketstelleGuid, "Aufgenommen");
            Console.WriteLine("fertig");

            status = client.GetPaketStatus(paketIdent);
            SaveBytetoPNG(status.MapImage, "InVersandprozessAufgenommen.jpg");

            Console.WriteLine("ImVersandprozess");
            client.ImVersandprozess(paketIdent, mitarbeiterGuid, paketzentrumGuid, "Wird versendet");
            Console.WriteLine("fertig");

            status = client.GetPaketStatus(paketIdent);
            SaveBytetoPNG(status.MapImage, "ImVersandprozess.jpg");

            Console.WriteLine("InAuslieferung");
            client.InAuslieferung(paketIdent, mitarbeiterGuid, fahrzeugGuid, "In Auslieferung");
            Console.WriteLine("fertig");

            status = client.GetPaketStatus(paketIdent);
            SaveBytetoPNG(status.MapImage, "InAuslieferung.jpg");

			client.GPS(fahrzeugGuid, new GPSCoordinate() { Latitude = 51.547976, Longitude = 9.932199 });

			status = client.GetPaketStatus(paketIdent);
			SaveBytetoPNG(status.MapImage, "InAuslieferung2.jpg");


            Console.WriteLine("Ausgeliefert");
            client.Ausgeliefert(paketIdent, mitarbeiterGuid, fahrzeugGuid, "Ausgeliefert an Gloth");
            Console.WriteLine("fertig");

            status = client.GetPaketStatus(paketIdent);
            SaveBytetoPNG(status.MapImage, "Ausgeliefert.jpg");

            status = client.GetPaketStatusWithoutImage(paketIdent);
            //SaveBytetoPNG(status.MapImage, "Ausgeliefert.jpg");


            List<PaketStatus> list = client.GetAllPaketStatus(paketIdent).ToList();

            foreach (PaketStatus statuslst in list)
            {
                Console.WriteLine(statuslst.Status.ToString());
                Console.WriteLine(statuslst.Zeitstempel.ToString());
                Console.WriteLine(statuslst.Beschreibung);
                Console.WriteLine("======================");
            }

            Console.WriteLine("abgeschlossen");
            Console.ReadLine();
        }

        private static void SaveBytetoPNG(byte[] image, string name)
        {
			if (image != null && image.Length > 0)
			{
				MemoryStream ms = new MemoryStream(image);
				Image returnImage = Image.FromStream(ms);

				returnImage.Save(name, System.Drawing.Imaging.ImageFormat.Png);
			}
        }
    }
}
